#include "EntradaTexto.h"

EntradaTexto::EntradaTexto(const char* fuente, int tamanio, SDL_Rect posicionParam, SDL_Color color, SDL_Surface* pantalla) {
	
	SDL_EnableUNICODE(SDL_ENABLE);
	texto = new SalidaTexto(fuente, tamanio);
	texto->setColor(color);
	texto->setSuperficie(pantalla);
	posicion = posicionParam;
	fst = true;
}

EntradaTexto::~EntradaTexto(void) {

	if (texto) {
		delete(texto);
	}
	SDL_EnableUNICODE(SDL_DISABLE);
}

bool EntradaTexto::get() {

	SDL_Event ev;
	SDL_PollEvent(&ev);
	if (str.size() < 32) {
	
		if (ev.type == SDL_KEYDOWN) {
			if (ev.key.keysym.unicode == (Uint16)' ') {
				str += (char) ev.key.keysym.unicode;
			}
			else if (ev.key.keysym.unicode == (Uint16)'a') {
				str += (char) ev.key.keysym.unicode;
			}
			else if (ev.key.keysym.unicode == (Uint16)'A') {
				str += (char) ev.key.keysym.unicode;
			}
			else if (ev.key.keysym.unicode == (Uint16)'0') {
				str += (char) ev.key.keysym.unicode;
			}
			else if ((ev.key.keysym.sym == SDLK_BACKSPACE) && (str.length() != 0)) {
				str.erase(str.length() - 1);
			}
			else if (ev.key.keysym.sym == SDLK_RETURN){
				return false;
			}
		}
		actualizar();
	}
	else {
		if (ev.type == SDL_KEYDOWN) {
			if ((ev.key.keysym.sym == SDLK_BACKSPACE) && (str.length() != 0)) {
				str.erase(str.size() - 1);
				actualizar();
			}
			else if (ev.key.keysym.sym == SDLK_RETURN) {
				return false;
			}
		}
	}
	return true;
}

void EntradaTexto::actualizar() {

	if (!fst) {
		texto->limpiar();
	}
	texto->echo(str.c_str(), posicion);
	fst = false;
}
